﻿using Search4.Domain.Entity;
using Search4.Domain.Repository;
using System;
using System.Web.UI.WebControls;

namespace Search4.Web.View.Cadastro
{
    public class CadastroEstabelecimento : System.Web.UI.Page
    {
        #region CONTROLES        
        public TextBox txbRazaoSocial { get; set; }        
        public TextBox txbNomeEstabelecimento { get; set; }        
        public TextBox txbDescricao { get; set; }       
        public TextBox txbCNPJ { get; set; }       
        public DropDownList ddlSegmento { get; set; }
        public TextBox txbEmailEstabelecimento { get; set; }        
        public TextBox txbTelefoneEstabelecimento { get; set; }            
        public TextBox txbEnderecoEstabelecimento { get; set; }       
        public TextBox txbNumeroEstabelecimento { get; set; }        
        public TextBox txbCidadeEstabelecimento { get; set; }        
        public TextBox txbCEPEstabelecimento { get; set; }        
        public TextBox txbComplementoEstabelecimento { get; set; }        
        public TextBox txbBairroEstabelecimento { get; set; }       
        public DropDownList ddlUFEstabelecimento { get; set; }
        public Button btnSalvarEstabelecimento { get; set; }
        public Button btnAlterarEstabelecimento { get; set; }
        public String IdDoEstabelecimentoEditar { get { return Request.QueryString["editar"]; } }
        public HiddenField hdnCodigoEstabelecimento { get; set; }
        #endregion

        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            VerificaSeUsuarioEstaLogado();
            ConfigurarPagina();

            if (!String.IsNullOrEmpty(IdDoEstabelecimentoEditar) && !IsPostBack)
            {
                CarregarEstabelecimentoParaEdicao(IdDoEstabelecimentoEditar);
            }
        }

        private void ConfigurarPagina()
        {
            btnSalvarEstabelecimento.Click += btnSalvarEstabelecimento_Click;
            btnAlterarEstabelecimento.Click += btnAlterarEstabelecimento_Click;
        }

      
        #region MÉTODOS UTILITÁRIOS
        private Estabelecimento PopulaEntidadeEstabelecimento(Boolean PopulaChavePrimaria)
        {
            var endereco = new Endereco();
            endereco.Bairro = txbBairroEstabelecimento.Text;
            endereco.CEP = txbCEPEstabelecimento.Text;
            endereco.Cidade = txbCidadeEstabelecimento.Text;
            endereco.Complemento = txbComplementoEstabelecimento.Text;
            endereco.Logradouro = txbEnderecoEstabelecimento.Text;
            endereco.Numero = txbNumeroEstabelecimento.Text;
            endereco.UF = ddlUFEstabelecimento.SelectedItem.Value;

            var enderecoRepository = new EnderecoRepository();
            enderecoRepository.Salvar(endereco);

            var usuarioRepository = new UsuarioRepository();
            var usuario = usuarioRepository.ObterPeloIdentificador(Convert.ToInt32(Session["USUARIO"]));


            var estabelecimento = new Estabelecimento();
            estabelecimento.IdEstabelecimento = PopulaChavePrimaria ? estabelecimento.IdEstabelecimento = Convert.ToInt32(hdnCodigoEstabelecimento.Value) : 0;
            estabelecimento.RazaoSocial = txbRazaoSocial.Text;
            estabelecimento.CNPJ = txbCNPJ.Text;
            estabelecimento.Descricao = txbDescricao.Text;
            estabelecimento.Email = txbEmailEstabelecimento.Text;
            estabelecimento.Nome = txbNomeEstabelecimento.Text;
            estabelecimento.Segmento = ddlSegmento.SelectedItem.Value;
            estabelecimento.Telefone = txbTelefoneEstabelecimento.Text;
            estabelecimento.Endereco = endereco;
            estabelecimento.Usuario = usuario;

            return estabelecimento;
        }

        private void CarregaDadosNaTela(Estabelecimento estabelecimento)
        {
            hdnCodigoEstabelecimento.Value = estabelecimento.IdEstabelecimento.ToString();
            txbRazaoSocial.Text = estabelecimento.RazaoSocial;
            txbNomeEstabelecimento.Text = estabelecimento.Nome;
            txbDescricao.Text = estabelecimento.Descricao;
            txbCNPJ.Text = estabelecimento.CNPJ;
            ddlSegmento.Text = estabelecimento.Segmento;
            txbEmailEstabelecimento.Text = estabelecimento.Email;
            txbTelefoneEstabelecimento.Text = estabelecimento.Telefone;
            txbEnderecoEstabelecimento.Text = estabelecimento.Endereco.Logradouro;
            txbNumeroEstabelecimento.Text = estabelecimento.Endereco.Numero;
            txbCidadeEstabelecimento.Text = estabelecimento.Endereco.Cidade;
            txbCEPEstabelecimento.Text = estabelecimento.Endereco.CEP;
            txbComplementoEstabelecimento.Text = estabelecimento.Endereco.Complemento;
            txbBairroEstabelecimento.Text = estabelecimento.Endereco.Bairro;
            ddlUFEstabelecimento.Text = estabelecimento.Endereco.UF;

            btnSalvarEstabelecimento.Visible = false;
            btnAlterarEstabelecimento.Visible = true;

        }

        private void VerificaSeUsuarioEstaLogado()
        {
            var lbtPainel = (LinkButton)Master.FindControl("lbtPainel");
            var lblSeparador = (Label)Master.FindControl("lblSeparador");
            var lbtCadastro = (LinkButton)Master.FindControl("lbtCadastro");
            var lblWelcome = (Label)Master.FindControl("lblWelcome");
            var lbtLogin = (LinkButton)Master.FindControl("lbtLogin");
            var lbtLogout = (LinkButton)Master.FindControl("lbtLogout");
            var usuarioLogado = Session["USUARIO"] != null ? true : false;
            if (usuarioLogado)
            {
                lbtLogin.Visible = false;
                lbtCadastro.Visible = false;
                lbtLogout.Visible = true;
                lblWelcome.Visible = true;
                lbtPainel.Visible = true;
                lblSeparador.Visible = true;
            }
            else
            {
                lbtLogin.Visible = true;
                lbtCadastro.Visible = true;
                lbtLogout.Visible = false;
                lblWelcome.Visible = false;
                lbtPainel.Visible = false;
                lblSeparador.Visible = false;
            }
        }
        #endregion


        #region MÉTODOS DE AÇÃO
        private void CarregarEstabelecimentoParaEdicao(String idEstabelecimento)
        {
            var estabelecimentoRepository = new EstabelecimentoRepository();
            var estabelecimento = estabelecimentoRepository.ObterPeloIdentificador(Convert.ToInt32(idEstabelecimento));

            if (estabelecimento != null && estabelecimento.Endereco != null)
            {
                var enderecoRepository = new EnderecoRepository();
                var endereco = enderecoRepository.ObterPeloIdentificador(estabelecimento.Endereco.IdEndereco);
                estabelecimento.Endereco = endereco;
            }

            CarregaDadosNaTela(estabelecimento);
        }
        
        void btnSalvarEstabelecimento_Click(object sender, EventArgs e)
        {
            var estabelecimento = PopulaEntidadeEstabelecimento(false);
            var estabelecimentoRepository = new EstabelecimentoRepository();
            Boolean erro = false;
            try
            {
                estabelecimentoRepository.Salvar(estabelecimento);
            }
            catch
            {
                erro = true;
            }

            if (!erro)
            {
                Page.RegisterStartupScript(",", "<script>alert('Cadastro efetuado com sucesso')</script>");
                Response.Redirect("Perfil.aspx");
            }
            else
            {
                Page.RegisterStartupScript(",", "<script>alert('Ocorreu um erro no cadastro')</script>");
            }
        }

        void btnAlterarEstabelecimento_Click(object sender, EventArgs e)
        {
            var estabelecimento = PopulaEntidadeEstabelecimento(true);
            var estabelecimentoRepository = new EstabelecimentoRepository();
            Boolean erro = false;
            try
            {
                estabelecimentoRepository.Salvar(estabelecimento);
            }
            catch
            {
                erro = true;
            }

            if (!erro)
            {
                Page.RegisterStartupScript(",", "<script>alert('Cadastro efetuado com sucesso')</script>");
                Response.Redirect("Perfil.aspx");
            }
            else
            {
                Page.RegisterStartupScript(",", "<script>alert('Ocorreu um erro no cadastro')</script>");
            }
        }
        #endregion
    }
}
